package net.seayan.designpattern4j.template;

/**
 * 模版方法模式
 * 定义一个操作算法的框架，而具体方法的实现延迟到子类当中进行
 * 子类可以不必更改算法结构而重新实现算法
 * 本例也演示了鉤子方法的使用
 * @author seasalt
 *
 */
public abstract class AbstractTemplate {
	
	protected abstract void start() ;
	
	protected abstract void check();
	
	protected abstract void stop();
	
	protected abstract void hook();
	
	//默认调用钩子方法
	protected boolean isHook(){
		return true;
	}
	
	public final void  run(){
		
		start();
		check();
		if(isHook()){
			hook();
		}
		stop();
		
	}

}
